package FileManager;

import java.util.HashMap;
import DiskManager.Disk;

public class FileManager {
    // 文件目录
    HashMap<String, Integer> fileDir = new HashMap<>();
    Disk disk = null;

    public FileManager(Disk d) {
        disk = d;
        readMap();
    }

    private void readMap() {
        String s = disk.readFilebyIndex(1);
        if ((byte)s.charAt(0) == 0)
        {
            initExampleFiles();
        }
        else
        {
            String[] str = s.split(";");
            for (int i = 0; i < str.length; i += 2) {
                if (str[i].getBytes()[0] == 0)
                {
                    break;
                }
                fileDir.put(str[i], (int) str[i + 1].getBytes()[0]);
            }
        }
    }

    public void initExampleFiles() {
        fileDir.put("1.exe",
                disk.requestforSpace("#A3;#B1;#C2;x=1;++x;--x;++x;!B3;--x;x=34;x=77;!C12;--x;END;".getBytes()));
        fileDir.put("2.exe", disk.requestforSpace("#A2;#B3;#C1;x=2;++x;--x;++x;!A5;--x;x=34;x=77;!C12;--x;END;".getBytes()));
        fileDir.put("3.exe", disk.requestforSpace("#A3;#B2;#C3;x=1;!C2;--x;++x;!B3;--x;x=45;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("4.exe", disk.requestforSpace("#A3;#B2;#C3;x=1;--x;!C2;x=34;--x;++x;!B3;--x;END;".getBytes()));
        fileDir.put("5.exe", disk.requestforSpace("#A2;#B1;#C4;x=1;!C2;x=45;--x;!C2;x=34;--x;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("6.exe", disk.requestforSpace("#A1;#B2;#C2;x=1;!C2;++x;!B3;--x;++x;!B3;--x;!C2;x=34;x=45;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("7.exe", disk.requestforSpace("#A4;#B2;#C1;x=1;!C2;--x;++x;!B3;--x;x=45;++x;!B3;--x;++x;!B3;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("8.exe", disk.requestforSpace("#A2;#B3;#C3;x=65;!B1;--x;END;x=34;!B3;!C2;--x;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("9.exe", disk.requestforSpace("#A1;#B1;#C1;x=1;!C2;--x;++x;!B3;--x;x=45;x=1;!C2;++x;!B3;--x;++x;x=77;!B1;--x;END;".getBytes()));
        fileDir.put("big.exe", disk.requestforSpace("#A3;#B2;#C3;x=1;!C2;--x;++x;!B3;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;x=45;x=77;!B1;--x;END;".getBytes()));
        writeMap();
    }
    
    // 写入map
    public void writeMap() {
        String content = new String();
        for (String i : fileDir.keySet()) {
            content += i;
            content += ";";
            byte[] idx = new byte[1];
            idx[0] = (byte) (fileDir.get(i).intValue());
            content += new String(idx);
            content += ";";
        }
        disk.updateFilebyBlockIndex(content.getBytes(), 1);
    }

    public String readContentbyFileName(String fileName) {
        return disk.readFilebyIndex(fileDir.get(fileName));
    }
}
